[Swift 2.3] 既存のプロジェクトをSwift 2.3に対応させる方法
Swift 2.3
こんにちは!
モバイルアプリサービス部の田中孝明です。
Xcode 8(iOS 10 SDK)に対応する際、Swift 3.0に対応される場合が多いでしょうが、Deployment Targetの関係上、Swift 3.0対応ができない(もしくは困難)場合もあります。
代表的なもので言えば、組み込んでいるライブラリが対応していない場合でしょうか。
通信ライブラリのAlamofire
と非同期画像取得ライブラリのAmamofireImage
は便利な反面、Swift 3.0対応版のDeployment TargetがiOS 9以上になりました。
お客様の要望上、iOS 8のサポートを切れない場合があり、やむなくSwift 3.0対応を見送ることもあるでしょう。
その際、Xcode 8 + iOS 10 SDKでビルドできるように、既存のプロジェクトをSwift 2.3に対応しておくという方法があります。
今回はプロジェクトをSwift 2.3に対応する方法を記します。
Swift 2.3対応とSwift 3.0対応に関しては第三回AKIBA.swiftにて植岡さんが既存プロジェクトを最新のXcodeに対応する方法 として発表していただきましたので、そちらも併せて参照頂ければ幸いです。
プロジェクトの設定
Xcode 8をインストールし、Swift 2.3に対応させたいプロジェクトを開きます。
プロジェクトのBuild Settings
のUse Lagacy Swift Language Version
の値をYes
に変更します。
こちらを設定することでXcode 8でも古いSwiftのバージョン(Swift 2.3)でビルドすることができるようになりました。
CocoaPodsの設定
ライブラリ管理ツールのCocoaPodsをSwift 2.3で対応できるようにしておきます。
Podfileをエディタで開き、各ライブラリのバージョンをSwift 2.3対応版を指定しておきます。
pod 'Alamofire', '3.5.1' pod 'SwiftyJSON', '2.4.0' pod 'ZXingObjC' pod 'KeychainAccess', '2.4.0' pod 'ActionSheetPicker-3.0' pod 'AlamofireImage', '2.5.0' pod 'Fabric' pod 'Crashlytics' pod 'AWSMobileAnalytics' pod 'RealmSwift' pod 'objc-geohash'
Podfileの最後に各ライブラリのビルド設定にSwift 2.3を指定する処理を追記しておきます。
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '2.3' end end end
あとはPodの更新を行えば各ライブラリがSwift 2.3でコンパイルできる状態で取得されます。
pod install
あとはコンパイラのエラー、もしくは警告の内容を参照し、ビルドができる環境になればXcode 8への対応が完了します。
まとめ
Swift 2.3対応ですが、恒久対応にはならない点に注意してください。 あくまでXcode 8 + iOS 10 SDKでビルドできる環境を提供しているだけであり、次のXcodeのバージョン以降、徐々にサポートが切られていく可能性があります。
指定するDeployment Target
に合致するライブラリの選定、ライブラリの独自実装、またはDeployment Target
の変更を提案するなど、なるべく早い段階でSwift 3.0へ移行したほうがよいでしょう。